import pandas as pd
import numpy as np
import os
import csv
import re
import spacy
import zh_core_web_sm
import pickle
import json
from itertools import compress
from sklearn.feature_extraction.text import CountVectorizer
import random
import gc
from sklearn.utils import shuffle
from collections import Counter
import shutil
import seaborn as sns
import matplotlib.pyplot as plt
#保存在.csv中的信息是可靠的
hamaterial = pd.read_csv('./audit/Human Audit Backend Data.csv')
hamaterial.head()

#这是文件名称
results_ = os.listdir('./audit/audit results')
# 使用一个诱饵
results = ['Human_Audit_0.xlsx']
#print(results)
#输出如<0>

# 这是表格型的数据pandas独有，构成一个二维数组
#这就是一个四x列标签
#空的，拿来收集
audit_result = pd.DataFrame(columns=['transcript_id','code','confidence','auditor'])
#print(audit_result)
#输出如下：
#Empty DataFrame
#Columns: [transcript_id, code, confidence, auditor]
#Index: []

for result in results:
    auditor = result.split('_')[2]
    #print(auditor)
    #auditor -> 0.xlsx 这样
    data = pd.read_excel('./audit/audit results/'+result) 
        # 从这里得到的exel结果到底是什么？(这个算是数据部分的问题了)#exel里面的标头 transcript_id	texts	filename	code	confidence	Unnamed:5 (auditor)后期加入
    data['auditor'] = auditor # 新的列名<auditor>
    data.columns = data.columns.str.lower() # 小写转换？
    #每一个data 大概长<1>这样,它是一个<class 'pandas.core.frame.DataFrame'>
    
    #关于使用 <class 'pandas.core.frame.DataFrame'> 的[]
    # data['x']-><class 'pandas.core.series.Series'> data[['x']]-><class 'pandas.core.frame.DataFrame'>
    
    #向其中加入
    #这里DataFrame.append()出了问题，
    #淦，pandas更新了。append()->_append()
    #注释干掉#sudit_result = audit_result.append(data[['transcript_id','code','confidence','auditor']])
    #此时的data[['transcript_id','code','confidence','auditor']] 大概长<1.1>这样
    audit_result = audit_result._append(data[['transcript_id','code','confidence','auditor']])

#merge意味数据合并
#就是把两个表左右拼接，只保留完全啮合的部分 依照 on=['transcript_id']
audit_result = pd.merge(hamaterial[['transcript_id','year','quarter','sic','cc_expo_ew','decile_ew']],audit_result, how='inner', on=['transcript_id'])
#此时的audit_result 大概长<2>这样

temp = audit_result.shape#大小(数据条数,栏目数量)

#DataFrame.code -> <class 'pandas.core.series.Series'>
#DataFrame.confidence -> <class 'pandas.core.series.Series'>
#两个都是列 to_numeric 用于将参数转换为数字类型
audit_result.code = pd.to_numeric(audit_result.code, errors='coerce')
audit_result.confidence = pd.to_numeric(audit_result.confidence, errors='coerce')
#经过to_numeric后，是 <class 'int'> -> <class 'numpy.int64'>

#nan 就是 Not a Number
audit_result.loc[audit_result.code>1,'code'] = np.nan
#但为什么是 Series([], Name: code, dtype: int64) -> Series([], Name: code, dtype: float64)


#目前的keys里面有 cc_expo_ew
#audit_result['CCExposure > 0?'] = audit_result.cc_expo_ew>0
#怀疑是使用了错误的命名。
audit_result['cc_expo_ew'] = audit_result.cc_expo_ew>0

#pandas.isna() 检查缺失值,返回bool
# .describe() 取得数据特征?可是为什么只对缺失值感兴趣?
audit_result[pd.isna(audit_result.decile_ew)].describe()

#用-1填补空值
audit_result.decile_ew = audit_result.decile_ew.fillna(-1)

#???这加一干嘛 这一部分的数据全部加一
audit_result.decile_ew = audit_result.decile_ew +1

#groupby 划分
#agg agg是aggregate的别名

##当调用median,
##提示 In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "median" instead.
##像这里给出的代码，就已经满足了使用 str的'median' 来代替np.median,这就不报错了
audit_gp = audit_result.groupby(['decile_ew']).agg({'code':'mean','cc_expo_ew':'median'}).reset_index()
#audit_gp = audit_result.groupby(['decile_ew']).agg({'code':'mean','cc_expo_ew':np.median}).reset_index()

#这是要作可视化?
plotdata = audit_result.melt(id_vars='decile_ew', value_vars=['cc_expo_ew','code'], value_name = 'cc_metrics')

deciles = ["Non CCExposure", '1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th','10th']

#为啥labels还超范围啊 1(使用诱饵数据时保留的数据量的太小了，找不满10个报错了)
#numpy.round()对一堆数保留指定小数
#np.round(audit_gp.cc_expo_ew*1000, 3) 这就是保留其中的3位了 但是为什么它tmd只有0~9啊
#咋从audit_gp开始就不足10个?(使用的诱饵裁剪过度,decile_ew==10的部分全部干掉了)

labels = [ deciles[i]+'\n'+ str(np.round(audit_gp.cc_expo_ew*1000, 3)[i]) for i in range(0,11)]

#这部分就是在做可视化了的图像了
#seaboen 似乎不太想要set这个方法了,转而采用了set_theme

#sns.set(font_scale = 1.5, style='white')
sns.set_theme(font_scale = 1.5, style='white')
plt.figure(figsize=(16, 10))
#为啥regplot会炸啊...... [!T_T]->FUCK
#缺少statsmodels? 我不是库都安装完了吗?
#问号
ax = sns.regplot(data = audit_result, x="decile_ew", y="code", scatter="",logistic=True)
ax.set(xlabel='Deciles of the CCExposure distribution', ylabel="""CCAudit""")
ax.set_yticks([0,1])
ax.set_xticks(range(0,11))
ax.set_xticklabels(labels = labels)
plt.savefig('audit.png')
plt.show()


#总结:SvLVZ Do File Figure 1.py 是负责对数据进行收集的脚本，不涉及处理(大概)
#2024年4月18日21点21分
#回头再写一个输出追踪数据变化的，看看到底发生了什么变化

#######################
#<0>
'''
['Human_Audit_0.xlsx', 'Human_Audit_1.xlsx',
'Human_Audit_10.xlsx', 'Human_Audit_11.xlsx',
'Human_Audit_12.xlsx', 'Human_Audit_13.xlsx',
'Human_Audit_14.xlsx', 'Human_Audit_15.xlsx',
'Human_Audit_16.xlsx', 'Human_Audit_17.xlsx',
'Human_Audit_18.xlsx', 'Human_Audit_19.xlsx',
'Human_Audit_2.xlsx', 'Human_Audit_3.xlsx',
'Human_Audit_4.xlsx', 'Human_Audit_5.xlsx',
'Human_Audit_7.xlsx', 'Human_Audit_8.xlsx',
'Human_Audit_9.xlsx']
'''
#妈的什么鬼读取顺序

#<1>data
'''
 transcript_id                                              texts                                           filename  code  confidence  unnamed: 5 auditor
0   137114668229  any specific is not necessary, but what is imp...    2012-Jul-10-ATDb.TO-137114668229-Transcript.txt     1           3         NaN  0.xlsx
1   140851213901               greetings, and welcome to the tip...    2019-Mar-14-TIPT.OQ-140851213901-Transcript.txt     0           3         NaN  0.xlsx
2   137952285118  globally we interconnect to other tier 1 backb...  2013-Aug-08-Cogent Communications Group Inc-13...     0           2         NaN  0.xlsx
3   139302942712  wells and production. i want to report for the...      2005-Nov-17-CVX.N-139302942712-Transcript.txt     1           3         NaN  0.xlsx
'''
   
#<1.1>data[['','','']]
'''
 transcript_id  code  confidence auditor
0   137114668229     1           3  0.xlsx
1   140851213901     0           3  0.xlsx
2   137952285118     0           2  0.xlsx
3   139302942712     1           3  0.xlsx
'''

#<2>audit_result
#对其太丑了,勉强看吧
'''
transcript_id  year  quarter     sic  cc_expo_ew  decile_ew code confidence auditor
0  139302942712  2005        4  2911.0    0.001055        6.0    1          3  0.xlsx
1  137114668229  2012        3  5412.0    0.000428        2.0    1          3  0.xlsx
2  137952285118  2013        3     NaN    0.000294        0.0    0          2  0.xlsx
3  140851213901  2019        1  6331.0    0.000000        NaN    0          3  0.xlsx
'''

"""
为了更好地了解中国气候，全面反映中国在气候系统监测、气
候影响评估、气候服务应用等方面的新成果、新进展，中国气象局
国家气候中心组织30余位专家编写了《中国气候公报（2023）》。公
报内容分为五章，分别从基本气候概况、气候系统监测、主要气象
灾害和极端天气气候事件、气候影响评估以及2023年国内外十大天
气气候事件等方面提供中国气候的最新监测和评估信息，可为各级
政府制定气候相关政策提供科技支撑，并为开展国内外科研与技术
交流以及气候科普宣传提供基础信息。
本公报可供各级决策部门以及气候、环境
本公报可供各级决策部门以及气候、环境、农业、林业、水资
源、能源等领域的科研与教学人员参考使用，也可供对气候学科感
兴趣的读者阅读

"""